當使用k8s碰上pod起不來 crash loop 或是pod 網路不通時,不外乎就是kubectl logs
或者 使用 kubectl exec
進入pod後,安裝curl tcp-dump 等工具來檢測,但是一來麻煩,二來建立pod的image通常是最小化的image,可能沒有apt-get
之類的安裝工具,在這種情況下,就會很難debug。
而kubectl-debug 就是能解決這種情況的工具。
kubectl-debug,是一個幫助你診斷以及debug的工具,他能夠在有問題的pod內建立一個工具容器,並且會加入目標容器的pid
, network
, user
和 ipc namespaces
內,所以你就可以透過這個工具容器內的工具來進行故障排除,而不用把這些工具加到出問題的容器image內了。
官網有不同的安裝方式,這邊挑如何用brew安裝:
brew install aylei/tap/kubectl-debug
安裝完成後,可以用kubectl-debug -h
來測試看看是否有成功安裝,成功安裝的話就會像下圖:
這樣子就是安裝成功了。
要注意的是k8s 1.18版本後,內建kubectl debug,這個跟我們剛剛介紹的kubectl-debug是不同東西,要注意一下。
kubectl-debug建立出來的pod是基於nicolaka/netshoot的image而來的(有興趣的人可以去看看netshoot的readme,有介紹到不少工具的使用,以及不同網路問題的排除。)
要測試也很簡單,只要下這句即可
kubectl-debug <pod-name>
將你的pod名稱代入後,就可以進行查看host或是使用netstat
的操作。
如果你的pod正在crash loop,無法連接的情況下,可以使用下面指令
kubectl-debug <pod-name> --fork
他會複製一個相同的pod出來,這時你就可以去對複製的pod進行診斷了。
透過這個工具,我們能夠比較容易地針對pod進行測試以及診斷,下一章會介紹最後一個k8s工具,希望對在看的人有幫助。